package common.serializer.mySerializer;

import java.io.*;

public class ObjectSerializer implements Serializer {
    @Override
    public byte[] serialize(Object object) {
        byte[] b = null;
        // 创建1个内存中的输出流，用于存储序列化后的字节数据
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            // 将对象转化为二进制数据，把对象数据写入字节缓冲区bos
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            // 把对象写入输入流中，触发序列化
            oos.writeObject(object);
            // 强制将缓冲区中的数据刷新到底层流bos中
            oos.flush();
            // 将字节缓冲区的内容转换为字节数组
            b = bos.toByteArray();
            oos.close();
            bos.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return b;
    }

    @Override
    public Object deserialize(byte[] bytes, int messageType) {
        Object obj = null;
        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        try {
            // 使用ObjectInputStream包装ByteArrayInputStream
            ObjectInputStream ois = new ObjectInputStream(bis);
            obj = ois.readObject();
            ois.close();
            bis.close();
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        return obj;
    }

    @Override
    public int getType() {
        return 0;
    }
}
